home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / The World of Computer Software.iso / dfpp01.zip / STRINGS.CPP < prev    next >
C/C++ Source or Header  |  1992-11-21  |  2KB  |  128 lines

  1. // -------- strings.cpp
  2.  
  3. #include "strings.h"
  4.  
  5. // ------- put a string into a String
  6. void String::putstr(char *s)
  7. {
  8.     delete sptr;
  9.     length = strlen(s);
  10.     sptr = new char[length+1];
  11.     strcpy(sptr, s);
  12. }
  13.  
  14. // --- convert from char *
  15. String::String(char *s)
  16. {
  17.     sptr = NULL;
  18.     putstr(s);
  19. }
  20.  
  21. // ------- copy constructor
  22. String::String(String& s)
  23. {
  24.     sptr = NULL;
  25.     putstr(s.sptr);
  26. }
  27.  
  28. // -------- construct with a size and fill character
  29. String::String(int len, char fill)
  30. {
  31.     length = len;
  32.     sptr = new char[length+1];
  33.     memset(sptr, fill, length);
  34.     *(sptr+len) = '\0';
  35. }
  36.  
  37. // -------- assignment
  38. String& String::operator=(String &s)
  39. {
  40.     if (this != &s)
  41.         putstr(s.sptr);
  42.     return *this;
  43. }
  44.  
  45. // ------- concatenation operator (str1 + str2)
  46. String String::operator+(String &s)
  47. {
  48.     int ln = 0;
  49.     if (sptr)
  50.         ln += strlen(sptr);
  51.     if (s.sptr)
  52.         ln += strlen(s.sptr);
  53.     String temp(ln);
  54.     if (sptr)
  55.         strcpy(temp.sptr, sptr);
  56.     if (s.sptr)
  57.         strcat(temp.sptr, s.sptr);
  58.     return temp;
  59. }
  60.  
  61. // ------ substring: right len chars
  62. String String::right(int len)
  63. {
  64.     String tmp;
  65.     if (sptr && len)    {
  66.         int sln = strlen(sptr);
  67.         if (len > sln)
  68.             len = sln;
  69.         if (len)
  70.             tmp = String(sptr + sln - len);
  71.     }
  72.     return tmp;
  73. }
  74.  
  75. // ------ substring: left len chars
  76. String String::left(int len)
  77. {
  78.     String tmp(len);
  79.     if (sptr && len)    {
  80.         int sln = strlen(sptr);
  81.         if (len > sln)
  82.             len = sln;
  83.         if (len)
  84.             strncpy(tmp.sptr, sptr, len);
  85.     }
  86.     return tmp;
  87. }
  88.  
  89. // ------ substring: middle len chars starting from where
  90. String String::mid(int len, int where)
  91. {
  92.     String tmp(len);
  93.     if (len && sptr && where < (int) strlen(sptr))
  94.         strncpy(tmp.sptr,sptr+where,len);
  95.     return tmp;
  96. }
  97.  
  98. // ---- find offset to first instance of specified char
  99. int String::FindChar(unsigned char ch)
  100. {
  101.     if (sptr)    {
  102.         char *cp = strchr(sptr, ch);
  103.         if (cp)
  104.             return (int) (cp - sptr);
  105.     }
  106.     return -1;
  107. }
  108.  
  109. // ------ change the buffer length of a string
  110. void String::ChangeLength(unsigned int newlen)
  111. {
  112.     if (length == 0)
  113.         *this = String(newlen);
  114.     else    {
  115.         char *cp = new char[newlen+1];
  116.         memset(cp, '\0', newlen+1);
  117.         if (sptr != NULL)    {
  118.             strncpy(cp, sptr, newlen);
  119.             delete sptr;
  120.         }
  121.         sptr = cp;
  122.         length = newlen;
  123.     }
  124. }
  125.  
  126.  
  127.  
  128.